<?php
class HasImageBehavior extends CActiveRecordBehavior
{
    /**
     * Путь до папки, куда будут складываться изображения модели
     * Должен содержать webroot
     * @var string
     */
    public $path = '';
    /**
     * Свойство модели, в котором хранится путь до изображения
     * @var string
     */
    public $image = 'image';
    /**
     * Свойство модели для удаления изображения
     * (обычно чекбокс "Удалить изображение" на форме)
     * @var string
     */
    public $delete = 'deleteImg';

    /**
     * Свойство поведения для задания случайного имени файлу
     * @var string
     */
    public $randomName = true;

    /**
     * Добавление/удаление изображения у модели перед ее сохранением
     * @return bool|void
     */
    public function beforeSave()
    {
        if($img = CUploadedFile::getInstance($this->owner, $this->image)){
            $fileName = $img->name;
            if ($this->randomName) {
                $ext = end(explode('.', $img->name));
                $fileName = uniqid() . '.' . $ext;
            }
			// $this->deleteImage(); на всякий случай не будем удалять (могут использовать одну картинку в нескольких местах)
            $this->owner->{$this->image} = $this->path . '/' . $fileName;
			$img->saveAs(Yii::getPathOfAlias('webroot') . $this->owner->{$this->image});
        }

        if(intval($this->owner->{$this->delete}) > 0)
        {
            $this->deleteImage();
            $this->owner->{$this->image} = '';
        }
    }

    /**
     * Удаление модели
     * @return bool|void
     */
    public function beforeDelete()
	{
		$this->deleteImage();
    }

    /**
     * Удаление файла
     */
    public function deleteImage()
	{
        $documentPath = Yii::getPathOfAlias('webroot') . $this->owner->{$this->image};
        if(is_file($documentPath))
            unlink($documentPath);
    }

    /**
     * Возвращает отновительный путь до изображения
     * @return string
     */
    public function getImagePath()
    {
        if(empty($this->owner->{$this->image}))
        {
            return '/img/no_image.gif';
        }
        else
        {
            return $this->owner->{$this->image};
        }
    }
	
	public function hasImage(){
		return !empty($this->owner->{$this->image});
	}
} 